#include <iostream>
#include "BlockQueue.hpp"
#include "RingQueue.hpp"
#include <time.h>
#include <unistd.h>
void *ctask(void *qtask)
{
    //BQueue<int>* q = static_cast<BQueue<int> *>(qtask);
    RQueue<int>* q = static_cast<RQueue<int> *>(qtask);
    while (true)
    {
        int date = q->pop();
        std::cout << "消费了date:"<<date << std::endl;
    }
    return nullptr;
}
void *ptask(void *qtask)
{
    // BQueue<int>* q = static_cast<BQueue<int> *>(qtask);
     RQueue<int>* q = static_cast<RQueue<int> *>(qtask);
    while (true)
    {
        int date = rand() % 100;
        q->push(date);
        std::cout << "生产了date:"<<date << std::endl;
        sleep(1);
    }
    return nullptr;
}



int main()
{

    srand(time(nullptr));
    pthread_t ctid[5],ptid[10];
    //BQueue<int> qtask;
    RQueue<int> qtask;

    for(int i = 0;i < 5;i++)
    {
        pthread_create(&ctid[i], nullptr, ctask, &qtask);
    }
    for(int i = 0;i < 10;i++)
    {
        pthread_create(&ptid[i], nullptr, ptask, &qtask);
    }

     for(int i = 0;i < 5;i++)
    {
        pthread_join(ctid[i], nullptr);

    }
    for(int i = 0;i < 10;i++)
    {
        pthread_join(ptid[i], nullptr);

    }



    return 0;
}